package com.ecarx.camera.ui.camera;

import android.view.View;

import androidx.fragment.app.Fragment;

import com.ecarx.camera.ui.contract.IMainView;
import com.ecarx.camera.worker.camera.ICameraWorker;

/**
 * 摄像头除预览页面外的UI接口
 */
public interface ICameraUI {

    /**
     * 初始化
     * @param mainView
     * @param fragment
     */
    void init(IMainView mainView, Fragment fragment);

    /**
     * 初始化布局
     * @param view
     */
    void bindViews(View view);

    /**
     * 绑定ICameraWorker
     * @param cameraWorker
     */
    void bindWorker(ICameraWorker cameraWorker);

    /**
     * 配置变化时更新布局
     */
    void updateViewsWhenConfigureChanged();

    /**
     * 拍照开始时更新页面
     */
    void updateOnPhotoTakingStarted();

    /**
     * 拍照完成后更新页面
     * @param successful
     */
    void updateOnPictureTaken(boolean successful);

    /**
     * 开始录像时更新页面
     */
    void updateOnVideoRecordingStarted();

    /**
     * 录像完成时更新页面
     * @param successful
     */
    void updateOnVideoTaken(boolean successful);

    /**
     * 缩放支持变化时更新UI
     * @param isSupported
     */
    void updateByZoomSupported(boolean isSupported);

    /**
     * 显示或隐藏录制中的提示布局
     * @param isVisible
     */
    void showVideoRecordingIndicator(boolean isVisible);

    /**
     * 设置录像时间文本
     * @param hours
     * @param minutes
     * @param seconds
     */
    void setVideoRecordingTimeText(String hours, String minutes, String seconds);

    /**
     * 拍照或录像的切换布局toggle显示状态
     */
    void toggleSwitchModeLay();

    /**
     * 拍照或录像的切换布局显示或隐藏
     * @param isVisible
     */
    void showSwitchModeLay(boolean isVisible);

    /**
     * 显示或隐藏缩放按钮
     * @param isVisible
     */
    void showZoomButton(boolean isVisible);

    /**
     * 选中或取消选中缩放按钮
     * @param isChecked
     */
    void setZoomButtonChecked(boolean isChecked);

    /**
     * 设置缩放按钮文本内容
     * @param zoomRatio
     */
    void setZoomButtonText(float zoomRatio);

    /**
     * 当选中拍照模式时更新布局
     */
    void updateWhenPhotoModeChecked();

    /**
     * 当选中录像模式时更新布局
     */
    void updateWhenVideoModeChecked();

    /**
     * 更新录像按钮状态
     */
    void updateVideoRecordingButton(boolean isTakingVideo);

    /**
     * 更新最近缩略图
     * @return 是否开始执行成功
     */
    boolean updateLatestThumbnail();

    /**
     * 设置录像按钮的enable状态
     * @param isEnable
     */
    void setVideoRecordingButtonEnable(boolean isEnable);

    /**
     * 选中或取消选中延迟拍照开关
     * @param isChecked
     */
    void setPhotoTimerChecked(boolean isChecked);

    /**
     * 选中或取消选中延迟录像开关
     * @param isChecked
     */
    void setVideoTimelapseChecked(boolean isChecked);

    /**
     * 选中或取消选中录像静音开关
     * @param isChecked
     */
    void setVideoMutedChecked(boolean isChecked);

    /**
     * 显示或隐藏倒计时布局
     * @param isVisible
     */
    void showCountDownLay(boolean isVisible);

    /**
     * 设置倒计时文本
     * @param text
     */
    void setCountDownText(String text);

    /**
     * 显示错误页面
     * @param errorText
     */
    void showErrorLay(String errorText);

    /**
     * 隐藏错误页面
     */
    void hideErrorLay();

    /**
     * 获取关联的Fragment
     * @return
     */
    Fragment getFragment();

    /**
     * 显示或隐藏所有布局
     * @param isVisible
     */
    void showAll(boolean isVisible);

}
